/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.brasilerp;


import br.com.brasilerp.estoque.Estocavel;
import br.com.brasilerp.estoque.Estoque;
import br.com.brasilerp.estoque.EstoqueException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author rgrosz
 */
class EstoqueImpl implements Estoque {

    private Map<Estocavel, Long> estoque;

    EstoqueImpl() {
        estoque = new HashMap<Estocavel, Long>();
    }

    @Override
    public void inserirProduto(Estocavel estocavel, long quantidade) throws EstoqueException {
        Long qtd = estoque.get(estocavel);
        if (qtd == null) {
            qtd = 0l;
        }
        qtd += quantidade;
        estoque.put(estocavel, qtd);
    }

    @Override
    public void removerProduto(Estocavel estocavel, long quantidade) throws EstoqueException {
        Long qtd = estoque.get(estocavel);
        if (qtd != null) {
            if (qtd > quantidade) {
                qtd -= quantidade;
                estoque.put(estocavel, qtd);
            } else if (qtd == quantidade) {
                estoque.remove(estocavel);
            } else {
                throw new EstoqueException();
            }
        } else {
            throw new EstoqueException();
        }
    }

    @Override
    public Estocavel buscarProduto(long codigo) throws EstoqueException {
        Estocavel retorno = null;
        Collection<Estocavel> estoq = this.estoque.keySet();
        for (Estocavel item : estoq) {
            if (item.getCodigo() == codigo) {
                retorno = item;
            }
        }
        if (retorno == null) {
            throw new EstoqueException();
        }
        return retorno;
    }
}
